<?php
// Работа с XML
function sitedocs_xmlcfg_parse($content_xml,$cfg=null)
{
	//
	if (is_null($cfg))
	{
		// Первоначальный массив не передан
		$cfg = array('title'=>false,'tmlvars'=>array(),'templates'=>array(),
						'exec'=>array(),'urls'=>Array());
	}
	$source_encoding = mst_getconfig('source-encoding');
	// Разбираем xml
	if (strlen($content_xml)<1)
	{
		return $cfg;
	}
	if (!($xml = simplexml_load_string($content_xml)))
	{
		return $cfg;
	}
	
	// echo '<pre>';var_dump($xml);echo '<pre>';
	// echo '<pre>';
	// print_r($xml);
	// print_r($content_xml);
	// echo '</pre>';

	// Тема
	if (strlen($xml->themes['name'])>0)
	{
		if ($source_encoding === 'utf-8')
		{
			$cfg['themes'] = $xml->themes['name'];
		}else
		{
			$cfg['themes'] = iconv('UTF-8',$source_encoding,$xml->themes['name']);
		}
		
	}
	// Переменные шаблона
	if (is_object($xml->tmlvars[0]))
	{
		foreach ($xml->tmlvars[0] as $varname=>$varvalue)
		{
			// 
			if ($source_encoding === 'utf-8')
			{
				$cfg['tmlvars'][$varname] = $varvalue;
			}else
			{
				$cfg['tmlvars'][$varname] = iconv('utf-8',$source_encoding,$varvalue);
			}
		}
	}
	// Исполнение функций
	if (is_object($xml->exec[0]))
	{
		foreach ($xml->exec[0]->children() as $varname=>$varvalue)
		{
			$exec_vars = (array) $varvalue->attributes();
			$exec_vars = $exec_vars["@attributes"];
			// Преобразуем вложенные элементы в массив
			$exec_vars['vars'] = sitedocs_xmlcfg_children2array($varvalue,$source_encoding);
			// Сохраняем тип запускаемого элемента
			$exec_vars['type'] = $varname;
			$cfg['exec'][] = $exec_vars;
		}
	}
	// Заголовок документа
	if (strlen($xml->title)>0)
	{
		$cfg['title'] = iconv('UTF-8',$source_encoding,$xml->title);
	}
	$cfg['tmlvars']['title'] = $cfg['title'];
	// Шаблоны
	if (is_object($xml->templates[0]))
	{
		foreach ($xml->templates[0]->template as $varvalue)
		{
			// echo '<pre>';var_dump($varvalue);echo '<pre>';
			$template = (array) $varvalue->attributes();
			if ('true' == @$template["@attributes"]['reset'])
			{
				// Очищаем список шаблонов
				$cfg['templates'] = array();
				$template["@attributes"]['reset'] = true;
			}else
			{
				// Устанавливаем недостающий атрибут
				$template["@attributes"]['reset'] = false;
			}
			// echo 'rrr'.$template["@attributes"]['reset'];
			$cfg['templates'][] = $template["@attributes"];
		}
	}
	return $cfg;
}

function sitedocs_xmlcfg_children2array($xmlElement,$source_encoding)
{
	// Определяем тип возвращаемого результата
	if (count($xmlElement->children())==0)
	{
		// Возвращаем строк
		return iconv('UTF-8',$source_encoding,(string)$xmlElement);
	}
	$result = array();
	foreach ($xmlElement->children() as $name=>$value)
	{
		// Просматриваем вложенные элементы
		// Добавляем переменные
		if (isset($result[$name]))
		{
			// Уже есть такое значени
			if (!isset($result[$name][0]))
			{
				// Если нужно - преобразовываем в массив
				$result[$name] = array($result[$name]);
			}
			// Добавляем значение в массив
			$result[$name][] = sitedocs_xmlcfg_children2array($value,$source_encoding);	
		}else
		{
			$result[$name] = sitedocs_xmlcfg_children2array($value,$source_encoding);
		}	
	}
	return $result;
}
?>